package com.example.testng.model;
import lombok.Data;
import java.util.Map;
//如果想通过响应体来准确判断的话，可以加上一个字段来通过jsonPath的方式来全部匹配，或者通过jsonPath的方式来部分匹配。
@Data
public class TestCase {
    // 重写equals和hashCode方法，以便在测试套件中唯一标识一个测试用例
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        TestCase testCase = (TestCase) o;
        return name.equals(testCase.name) &&
               url.equals(testCase.url) &&
               method.equals(testCase.method);
    }

    @Override
    public int hashCode() {
        return java.util.Objects.hash(name, url, method);
    }

    private String name;
    private int priority = 0;  // 优先级，数字越小优先级越高
    private boolean enabled = true;  // 是否启用该测试用例
    private String url;
    private String method;
    private Map<String, String> headers;
    private String requestBody;
    private Map<String, Object> formData;
    private int expectedStatusCode;
    private String expectedResponseBody;
    private boolean partialMatch = true;  // 默认使用部分匹配
    private String dbValidationQuery;
    private Integer expectedDbCount;  // 期望的数据库查询结果数量，null表示使用默认值1

    // Lombok 会自动生成构造函数、getter和setter方法

    @Override
    public String toString() {
        return "TestCase{" +
                "name='" + name + '\'' +
                ", priority=" + priority +
                ", enabled=" + enabled +
                ", url='" + url + '\'' +
                ", method='" + method + '\'' +
                ", headers=" + headers +
                ", requestBody='" + requestBody + '\'' +
                ", formData=" + formData +
                ", expectedStatusCode=" + expectedStatusCode +
                ", expectedResponseBody='" + expectedResponseBody + '\'' +
                ", dbValidationQuery='" + dbValidationQuery + '\'' +
                ", expectedDbCount=" + expectedDbCount +
                '}';
    }
}